home *** CD-ROM | disk | FTP | other *** search
/ Network CD 1 / Network CD.iso / amospd / 501-510 / apd507 / mastermind.amos / mastermind.amosSourceCode
AMOS Source Code  |  1992-06-30  |  13KB  |  520 lines

  1. Dim _INK(8),_TRY(13,5),USED(5),USED2(5),WHITES(12),BLACKS(12),DISPLAY_TEXT$(5)
  2. Global _INK(),_TRY(),GUESS,_COLOUR,USED(),WHITES(),BLACKS(),USED2(),BUTTONS,_TEST$,DISPLAY_TEXT$(),LAST_TEXT,TEST_TEXT,RULES_SCROLL,DELAY,_START_COLOUR
  3. INIT_VARIABLES
  4. _STARTUP_INFO
  5. _SETUP
  6. _MAIN_LOOP
  7. '
  8. '
  9. '
  10. Procedure _MAIN_LOOP
  11.    Do 
  12.       _GAME
  13.       Locate 22,18 : Print "                 ";
  14.       Put Block 5,0,0
  15.       CLEAR_GUESS
  16.    Loop 
  17. End Proc
  18. '
  19. Procedure _GAME
  20.    GUESS=13
  21.    Repeat : Until Inkey$=""
  22.    Pen 8
  23.    Locate 22,17
  24.    Print "     Solution   "
  25.    LAST_TEXT=5 : _TEXT$=""
  26.    _START_COLOUR=1 : _GET_COLOUR
  27.    _NEXT_GUESS
  28.    CLEAR_GUESS
  29.    LAST_TEXT=3
  30.    _START_COLOUR=1 : _GET_COLOUR
  31.    '
  32.    Repeat 
  33.       Paper 0
  34.       Pen 8
  35.       Locate 22,17
  36.       Print "     Guess";GUESS;" "
  37.       _NEXT_GUESS
  38.       If BUTTONS=0 and GUESS<12 and GUESS=>0
  39.          CLEAR_GUESS
  40.          _MARK
  41.          _STORE
  42.       End If 
  43.       TEST=GUESS+1
  44.       If BLACKS(TEST)=5
  45.          FOUND_IN=0-GUESS+12 : GUESS=0
  46.          Locate 22,17
  47.          Paper 0
  48.          Pen 11
  49.          Print "   Solved in";FOUND_IN
  50.       End If 
  51.    Until GUESS<=0
  52.    _SHOW_SOLUTION
  53.    Locate 22,18
  54.    Pen 8
  55.    Paper 0
  56.    Print "  Press any key  "
  57.    Repeat 
  58.       _GO=Mouse Click
  59.       If Inkey$<>"" Then _GO=1
  60.    Until _GO
  61.    Repeat 
  62.       A$=Inkey$
  63.    Until A$=""
  64.    NEWGAME
  65. End Proc
  66. '
  67. Procedure _NEXT_GUESS
  68.    Shared _TEXT$
  69.    Repeat 
  70.       FULL=0
  71.       Repeat 
  72.          If COUNTER=DELAY and RULES_SCROLL=1
  73.             If _TEXT$=""
  74.                TEST_TEXT=0
  75.                If LAST_TEXT=3
  76.                   _TEXT$=DISPLAY_TEXT$(1) : LAST_TEXT=1
  77.                   TEST_TEXT=1
  78.                End If 
  79.                If LAST_TEXT=2
  80.                   _TEXT$=DISPLAY_TEXT$(3) : LAST_TEXT=3
  81.                End If 
  82.                If LAST_TEXT=1 and TEST_TEXT=0
  83.                   _TEXT$=DISPLAY_TEXT$(2) : LAST_TEXT=2
  84.                End If 
  85.                TEST_TEXT=0
  86.                If GUESS=13 and LAST_TEXT=4
  87.                   _TEXT$=DISPLAY_TEXT$(5)
  88.                   LAST_TEXT=5
  89.                   TEST_TEXT=1
  90.                End If 
  91.                If GUESS=13 and LAST_TEXT=5 and TEST_TEXT=0
  92.                   _TEXT$=DISPLAY_TEXT$(4)
  93.                   LAST_TEXT=4
  94.                End If 
  95.                _TEXT$="                "+_TEXT$
  96.             End If 
  97.             Locate 22,18
  98.             Paper 0
  99.             Pen 1
  100.             Print Left$(_TEXT$,17);
  101.             _TEXT$=Right$(_TEXT$,Len(_TEXT$)-1)
  102.             COUNTER=0
  103.          End If 
  104.          Inc COUNTER
  105.          If COUNTER>DELAY Then COUNTER=0
  106.          If Inkey$<>"" and GUESS=13
  107.             For RANDOM_SOLUTION=1 To 5
  108.                _TRY(13,RANDOM_SOLUTION)=Rnd(7)+1
  109.                FULL=1
  110.             Next 
  111.          End If 
  112.          If GUESS=0 Then FULL=1
  113.          _MOVE_MOUSE
  114.          If Joy(1)=>16 Then _BUTTON_PRESSED=1
  115.          If _BUTTON_PRESSED=0 Then _BUTTON_PRESSED=Mouse Click
  116.       If FULL=0 Then Until _BUTTON_PRESSED=1
  117.       _BUTTON_PRESSED=0
  118.       If FULL=0 and GUESS>0
  119.          If Y Screen(Y Mouse)<151
  120.             Repeat 
  121.             Until Mouse Click=0
  122.             BUTTON
  123.             BUTTONS=1
  124.          Else 
  125.             BUTTONS=0
  126.          End If 
  127.          If BUTTONS=0 and GUESS>0
  128.             If X Screen(X Mouse)<104
  129.                _GET_COLOUR
  130.             End If 
  131.             If X Screen(X Mouse)>103
  132.                _SPOT
  133.             End If 
  134.             FULL=True
  135.             For X=1 To 5
  136.                If _TRY(GUESS,X)=0
  137.                   FULL=False
  138.                End If 
  139.             Next 
  140.          End If 
  141.          If GUESS=0
  142.             FULL=1
  143.          End If 
  144.       End If 
  145.    Until FULL
  146.    If GUESS=13 Then _TEXT$=""
  147.    GUESS=GUESS-1
  148. End Proc
  149. '
  150. Procedure _SPOT
  151.    X=(X Screen(X Mouse)-128)
  152.    Y=(Y Screen(Y Mouse)-178)
  153.    RADIAS=15 : SPOT_X=0 : SPOT=0
  154.    For _BOX=1 To 5
  155.       If X=<SPOT_X+RADIAS and Y=<RADIAS and X=>SPOT_X-RADIAS and Y=>-RADIAS
  156.          SPOT=_BOX
  157.          _BOX=5
  158.       End If 
  159.       If SPOT=0 Then SPOT_X=SPOT_X+41
  160.    Next 
  161.    If SPOT>0 and SPOT>0
  162.       If SPOT>0 and SPOT<6
  163.          Ink _INK(_COLOUR)
  164.          Paint(SPOT-1)*41+128,178
  165.          _TRY(GUESS,SPOT)=_COLOUR
  166.       End If 
  167.    End If 
  168. End Proc
  169. '
  170. Procedure _SETUP
  171.    Break Off 
  172.    Curs Off 
  173.    Change Mouse 2
  174.    Show 
  175.    Cls 0
  176.    Paper 0
  177.    Pen 1
  178.    Load Iff "mastermind.iff"
  179.    Get Block 5,0,0,320,136
  180.    Ink 3
  181.    Limit Mouse 130,186 To 446,247
  182.    Randomize Timer
  183. End Proc
  184. '
  185. Procedure INIT_VARIABLES
  186.    _INK(1)=1
  187.    _INK(2)=14
  188.    _INK(3)=4
  189.    _INK(4)=12
  190.    _INK(5)=15
  191.    _INK(6)=6
  192.    _INK(7)=10
  193.    _INK(8)=13
  194.    GUESS=13
  195.    _COLOUR=1
  196.    Ink _INK(1)
  197.    DISPLAY_TEXT$(1)="Use the mouse to select a colour, and then the place where you want that colour peice. When you have filled all blank places i will store and mark your guess. "
  198.    DISPLAY_TEXT$(2)="Marking: White circle represent a correct colour peice but in the wrong place, and  Black circle represent a correct colour in the correct place. These circles are found next to your guess on the board. "
  199.    DISPLAY_TEXT$(3)="The circles are not in any order. "
  200.    DISPLAY_TEXT$(4)="If you want a computer generated solution press any key or, Make sure that the person, who is going to attempt to guess the solution, can not see the screen at the moment. "
  201.    DISPLAY_TEXT$(5)="Select your colour, then put it in then place where you want it. When all places are filled i will hide your solution and wait for other player to put in their guesses. "
  202.    RULES_SCROLL=1
  203.    DELAY=61
  204. End Proc
  205. '
  206. Procedure _GET_COLOUR
  207.    Shared _TEXT$,LAST_TEXT,_START_COLOUR
  208.    If _START_COLOUR=1 and Joy(1)=<16
  209.       Repeat 
  210.          Break On 
  211.       Until Joy(1)<16
  212.    End If 
  213.    Break Off : Repeat : Until Joy(1)<16
  214.    Repeat 
  215.       X_OFF=_COLOUR-1 : Y_OFF=0
  216.       If _COLOUR>4 Then Y_OFF=1 : X_OFF=_COLOUR-4-1
  217.       X_OFF=((X_OFF)*25)+3
  218.       Y_OFF=(Y_OFF*21)
  219.       Y_OFF=Y_OFF+157
  220.       If _COLOUR>0 and _COLOUR<>5 Then X_OFF=X_OFF-1
  221.       If _COLOUR=4 or _COLOUR=8 or _COLOUR=5 Then X_OFF=X_OFF-1
  222.       Ink 0
  223.       Box X_OFF-1,Y_OFF-1 To X_OFF+23,Y_OFF+19
  224.       Box X_OFF,Y_OFF To X_OFF+22,Y_OFF+18
  225.       If _START_COLOUR=0
  226.          Repeat 
  227.             X=(X Screen(X Mouse)-1)/25
  228.             Y=(Y Screen(Y Mouse)-156)/21
  229.             If X>3
  230.                X=9
  231.             End If 
  232.             _COLOUR=Y*4+X+1
  233.             If _COLOUR>0 and _COLOUR<9
  234.                Ink _INK(_COLOUR)
  235.                _COLOUR_SET=True
  236.             End If 
  237.          Until _COLOUR_SET
  238.       End If 
  239.       If _START_COLOUR=1 Then _COLOUR=1
  240.       X_OFF=_COLOUR-1 : Y_OFF=0
  241.       If _COLOUR>4 Then Y_OFF=1 : X_OFF=_COLOUR-4-1
  242.       X_OFF=((X_OFF)*25)+3
  243.       Y_OFF=(Y_OFF*21)
  244.       Y_OFF=Y_OFF+157
  245.       If _COLOUR>0 and _COLOUR<>5 Then X_OFF=X_OFF-1
  246.       If _COLOUR=4 or _COLOUR=8 or _COLOUR=5 Then X_OFF=X_OFF-1
  247.       Ink 1
  248.       Box X_OFF-1,Y_OFF-1 To X_OFF+23,Y_OFF+19
  249.       Box X_OFF,Y_OFF To X_OFF+22,Y_OFF+18
  250.       _START_COLOUR=0
  251.    Until Mouse Key=0
  252.    '
  253. End Proc
  254. '
  255. Procedure CLEAR_GUESS
  256.    Ink 9
  257.    X=132 : Y=178
  258.    For Z=1 To 5
  259.       Paint X,Y
  260.       X=X+41
  261.    Next 
  262.    Ink _INK(_COLOUR)
  263.    If GUESS=12 Then Ink _INK(1)
  264. End Proc
  265. '
  266. Procedure _STORE
  267.    X_OFF=0
  268.    If GUESS=>6 Then X_OFF=166
  269.    X_OFF=X_OFF+13
  270.    Y_OFF=GUESS
  271.    If GUESS=>6 Then Y_OFF=GUESS-5
  272.    If GUESS<6 Then Y_OFF=Y_OFF+1
  273.    X=7
  274.    Repeat 
  275.       X=X-1
  276.    Until X=Y_OFF
  277.    If X=0 Then X=1
  278.    Y_OFF=X*22-20+10
  279.    For RE=1 To 5
  280.       Ink _INK(_TRY(GUESS+1,RE))
  281.       Paint X_OFF,Y_OFF
  282.       X_OFF=X_OFF+20
  283.    Next 
  284.    OLD_COLOUR=_COLOUR
  285.    Ink _INK(5)
  286.    If BLACKS(GUESS+1)>0
  287.       For _BLACK=1 To BLACKS(GUESS+1)
  288.          Paint X_OFF,Y_OFF
  289.          X_OFF=X_OFF+8
  290.       Next 
  291.    End If 
  292.    If WHITES(GUESS+1)>0
  293.       Ink _INK(1)
  294.       For _WHITE=1 To WHITES(GUESS+1)
  295.          Paint X_OFF,Y_OFF
  296.          X_OFF=X_OFF+8
  297.       Next 
  298.    End If 
  299.    Ink OLD_COLOUR
  300. End Proc
  301. '
  302. Procedure _MARK
  303.    TEST=GUESS+1
  304.    BLACKS(TEST)=0
  305.    For ANSWER=1 To 5
  306.       USED(ANSWER)=0
  307.       USED2(ANSWER)=0
  308.       If _TRY(13,ANSWER)=_TRY(TEST,ANSWER)
  309.          BLACKS(TEST)=BLACKS(TEST)+1
  310.          USED2(ANSWER)=1
  311.          USED(ANSWER)=1
  312.       End If 
  313.    Next 
  314.    WHITES(TEST)=0
  315.    For ANSWER=1 To 5
  316.       For TRY=1 To 5
  317.          If TRY<>ANSWER
  318.             If USED(ANSWER)=0 and USED2(TRY)=0
  319.                If _TRY(13,ANSWER)=_TRY(TEST,TRY)
  320.                   WHITES(TEST)=WHITES(TEST)+1
  321.                   USED(ANSWER)=1
  322.                   USED2(TRY)=1
  323.                End If 
  324.             End If 
  325.          End If 
  326.       Next 
  327.    Next 
  328. End Proc
  329. '
  330. Procedure BUTTON
  331.    Locate 0,0
  332.    X=X Screen(X Mouse)
  333.    If X<40 and X>2
  334.       QUIT
  335.    End If 
  336.    If ANSWER=0 and X>40 and X<92
  337.       _RULES
  338.    End If 
  339.    If X>92 and X<171 and GUESS<13 Then GUESS=0
  340.    ANSWER=0
  341. End Proc
  342. '
  343. Procedure NEWGAME
  344.    For X=1 To 13
  345.       For Y=1 To 5
  346.          _TRY(X,Y)=0
  347.       Next 
  348.    Next 
  349. End Proc
  350. '
  351. Procedure _SHOW_SOLUTION
  352.    Y_OFF=178
  353.    X_OFF=128
  354.    For X=1 To 5
  355.       Ink _INK(_TRY(13,X))
  356.       Paint X_OFF,Y_OFF
  357.       X_OFF=X_OFF+41
  358.    Next 
  359. End Proc
  360. '
  361. Procedure QUIT
  362.    Get Block 1,0,110,96,47
  363.    Ink 0
  364.    Bar 0,115 To 95,152
  365.    Ink 1
  366.    Box 0,115 To 95,152
  367.    Locate 1,15
  368.    Pen 1 : Paper 0
  369.    Print "Realy Quit"
  370.    Ink 1
  371.    Bar 5,134 To 34,144
  372.    Bar 68,134 To 89,144
  373.    Paper 1 : Pen 0
  374.    Locate 1,17 : Print "Yes"
  375.    Locate 9,17 : Print "No"
  376.    Repeat : Until Joy(1)<16 : Repeat 
  377.       Repeat 
  378.          _MOVE_MOUSE
  379.          If Joy(1)=>16 Then _BUTTON_PRESSED=1
  380.          If _BUTTON_PRESSED=0 Then _BUTTON_PRESSED=Mouse Click
  381.       If FULL=0 Then Until _BUTTON_PRESSED=1
  382.       _BUTTON_PRESSED=0
  383.       X=X Screen(X Mouse) : Y=Y Screen(Y Mouse)
  384.       If Y=>134 and Y=<144
  385.          If X=>5 and X<=34
  386.             If Exist("menu.amos")
  387.                Run "menu.amos"
  388.             End If 
  389.             System 
  390.          End If 
  391.          If X=>68 and X<=89
  392.             ANSWER=1
  393.          End If 
  394.       End If 
  395.    Until ANSWER
  396.    Put Block 1,0,110 : Repeat : Until Joy(1)<16
  397. End Proc
  398. '
  399. Procedure _RULES
  400.    Get Block 2,10,119,112,55
  401.    Ink 0
  402.    Bar 11,119 To 117,171
  403.    Ink 1
  404.    Box 11,119 To 117,171
  405.    Paper 0 : Pen 1
  406.    Locate 2,15 : Print "Rules Scroll"
  407.    Locate 2,16 : Print "    Delay"
  408.    Paper 0 : Pen 1
  409.    Locate 3,17 : Print " - ";
  410.    Locate 10,17 : Print " + ";
  411.    Paper 1 : Pen 0
  412.    Locate 3,20 : Print " On ";
  413.    Locate 8,20 : Print " Off "
  414.    DELAY$=Str$(DELAY/10)
  415.    DELAY$=Right$(DELAY$,Len(DELAY$)-1)
  416.    Locate 6,17
  417.    Pen 8 : Paper 0
  418.    If DELAY/10<10 Then Print " ";
  419.    If DELAY/10<100 Then Print " ";
  420.    If DELAY/10<1000 Then Print " ";
  421.    Print DELAY$;
  422.    Box 23,159 To 56,168
  423.    Box 63,159 To 104,168
  424.    Box 23,135 To 104,144
  425.    _DONE=0
  426.    Repeat 
  427.       Repeat 
  428.          _MOVE_MOUSE
  429.          If Joy(1)=>16 Then _BUTTON_PRESSED=1
  430.          If _BUTTON_PRESSED=0 Then _BUTTON_PRESSED=Mouse Click
  431.       If FULL=0 Then Until _BUTTON_PRESSED=1
  432.       _BUTTON_PRESSED=0
  433.       X=X Screen(X Mouse) : Y=Y Screen(Y Mouse)
  434.       If X>23 and X<56 and Y>159 and Y<168
  435.          RULES_SCROLL=1
  436.          _DONE=1
  437.       End If 
  438.       If X>63 and X<104 and Y>159 and Y<168
  439.          RULES_SCROLL=0
  440.          _DONE=1
  441.       End If 
  442.       While Mouse Key=1 or Joy(1)=>16
  443.          X=X Screen(X Mouse) : Y=Y Screen(Y Mouse)
  444.          If X>23 and X<48 and Y>135 and Y<144
  445.             If DELAY>10
  446.                DELAY=DELAY-10
  447.                Pen 0 : Paper 1
  448.                Locate 3,17 : Print " - ";
  449.             End If 
  450.          End If 
  451.          If X>79 and X<104 and Y>135 and Y<144
  452.             If DELAY/10<1000
  453.                DELAY=DELAY+10
  454.                Pen 0 : Paper 1
  455.                Locate 10,17 : Print " + ";
  456.             End If 
  457.          End If 
  458.          DELAY$=Str$(DELAY/10)
  459.          DELAY$=Right$(DELAY$,Len(DELAY$)-1)
  460.          Locate 6,17
  461.          Paper 0 : Pen 8
  462.          If DELAY/10<10 Then Print " ";
  463.          If DELAY/10<100 Then Print " ";
  464.          If DELAY/10<1000 Then Print " ";
  465.          Print DELAY$;
  466.          Wait 5
  467.       Wend 
  468.       Paper 0 : Pen 1
  469.       Locate 3,17 : Print " - ";
  470.       Locate 10,17 : Print " + ";
  471.    Until _DONE
  472.    Put Block 2,10,119
  473.    If RULES_SCROLL=0
  474.       Locate 22,18
  475.       Pen 1 : Paper 0
  476.       Print "                 ";
  477.    End If : Repeat : Until Joy(1)<16
  478. End Proc
  479. '
  480. Procedure _STARTUP_INFO
  481.    Hide 
  482.    Curs Off 
  483.    Cls 0
  484.    Paper 0
  485.    A$="                     Welcome To FoxWare's Master Mind.          Press any key or mouse buton to continue.       Other FoxWare Products:   Othello   Solitaire   Monopoly.       FoxWare:-   Paul Fox   102 Wrigley St.   Maroochydore Qld. 4558"
  486.    A$=A$+" Registration Number 002376 "
  487.    Repeat 
  488.       Locate ,15
  489.       X=X+1
  490.       B$=Right$(Left$(A$,X),20)
  491.       If X=Len(A$)+1 Then X=0 : Wait 30
  492.       For Z=1 To 10
  493.          If Mouse Click=1 Then Z=10 : _CONT=1
  494.          If _CONT=0
  495.             If Inkey$<>""
  496.                Z=10 : _CONT=1
  497.             End If 
  498.          End If 
  499.       Next 
  500.       For _WAIT=1 To 6
  501.          Wait Vbl 
  502.       Next 
  503.       Centre B$
  504.    Until _CONT
  505. End Proc
  506. '
  507. Procedure _MOVE_MOUSE
  508.    While Joy(1)>0 and Joy(1)<16
  509.       J=Joy(1)
  510.       If J=>8 Then X Mouse=X Mouse+2 : J=J-8
  511.       If J=>4 Then X Mouse=X Mouse-2 : J=J-4
  512.       If J=>2 Then Y Mouse=Y Mouse+2 : J=J-2
  513.       If J=1 Then Y Mouse=Y Mouse-2
  514.       Wait Vbl 
  515.    Wend 
  516.    While Joy(1)=17
  517.       Break On 
  518.    Wend 
  519.    Break Off 
  520. End Proc